package edu.sctu.practice.class02.hujie.online_classes_practice.imooc.Java_XMLRead.SAX;

import org.xml.sax.SAXException;

import java.util.ArrayList;

/**
 * Created by hp on 2016/3/8.
 */
public class SAXParserHandler extends org.xml.sax.helpers.DefaultHandler {
    //    //用来遍历xml的开始标签
//    @Override
//    public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes) throws org.xml.sax.SAXException {
//        super.startElement(uri, localName, qName, attributes);
//    }
//
//    //用来遍历xml的结束标签
//    @Override
//    public void endElement(String uri, String localName, String qName) throws org.xml.sax.SAXException {
//        super.endElement(uri, localName, qName);
//    }
    int bookIndex = 0;
    String value = null;
    Book book = null;

    public ArrayList<Book> getBookList() {
        return bookList;
    }

    private ArrayList<Book> bookList=new ArrayList<Book>();

    //用来标志解析开始
    @Override
    public void startDocument() throws org.xml.sax.SAXException {
        super.startDocument();
        System.out.println("SAX解析开始");
    }

    //用来标志解析结束
    @Override
    public void endDocument() throws org.xml.sax.SAXException {
        super.endDocument();
        System.out.println("SAX解析结束");
    }

    @Override
    public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes) throws org.xml.sax.SAXException {
        super.startElement(uri, localName, qName, attributes);
        //开始解析book元素的属性
        if (qName.equals("book")) {
            //创建一个book对象
            book = new Book();
            System.out.println("********开始遍历********");
            bookIndex++;
            //已知book元素下属性的名称，根据属性名称获取属性值
//           String value= attributes.getValue("id");
//            System.out.println("book的属性值是："+value);
            //不知道book元素下属性的名称以及个数，如何获取属性名以及属性值
            int num = attributes.getLength();
            for (int i = 0; i < num; i++) {
                System.out.print("book元素的第" + (i + 1) + "个属性名是：" + attributes.getQName(i));
                System.out.println("---属性值是：" + attributes.getValue(i));
                if (attributes.getQName(i).equals("book")) {
                    book.setId(attributes.getValue(i));
                }
            }
        } else if (!qName.equals("book") && !qName.equals("bookstore"))
            System.out.print("节点名是：" + qName);
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        //调用DefaultHandler类的endElement方法
        super.endElement(uri, localName, qName);
        //判断是否针对一本书已经遍历结束
        if (qName.equals("book")) {
            bookList.add(book);//存储书的信息
            book=null;
            System.out.println("********结束遍历********");
        } else if (qName.equals("name")) {
            book.setName(value);
        }else if (qName.equals("author")) {
            book.setAuthor(value);
        }else if (qName.equals("year")) {
            book.setYear(value);
        }else if (qName.equals("price")) {
            book.setPrice(value);
        }else if (qName.equals("language")) {
            book.setLanguage(value);
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        value = new String(ch, start, length);
        if (!value.trim().equals("")) {
            System.out.println("节点值是：" + value);
        }
    }
}
